
/**
 * 校验身份证号码1-6位应在110000-699999范围内：
 */
function ga_sfhmAfore6Validate(a)
{
    var s = a.value;
    var msg = '__ok__';
    if(s != ''){
		var sfz6Str = s.substring(0,6);
		if(!(sfz6Str>=110000 && sfz6Str<=699999)){   
			msg = '_error_';
		}
    }
   return msg;
}

/**
 * 校验身份证号码与出生日期是否相符：
 */
function ga_sfzAndCsrq(a,csrq)
{
    var s=a.value;
    var msg = '__ok__';
    if(s!='' && csrq!=null && csrq!=''){
   		var csrqStr = s.substring(6,14);
   		if(csrqStr!=csrq){   
   			msg = '_error_';
   		}
    }
    return msg; 
}

/**
 * 根据身份证号码获得出生日期：
 */
function ga_getCsrqFromSfz(csrqObjcet,sfzObject)
{
    var sfz=sfzObject.value;
    var csrq = sfz.substring(6,14);
    csrqObjcet.value = csrq;
    return csrq;
}

/**
 * 校验身份证号码与性别是否相符：
 */
function ga_sfzAndXb(a,xb)
{   
    var s = a.value;
    var msg = '__ok__';
    if(s!=''){
	    if(xb!=null&&xb!=""){
	   		var xbStr = s.substring(16,17);
	   		if(xb=='1'){
	   			if(xbStr%2==0){
	   				msg = '_error_';
	   			}
	   		}else if(xb=='2'){
	   			if(xbStr%2!=0){
	   				msg = '_error_';
	   			}
	   		}
	    }
    }
	return msg;
}

/**
 * 根据身份证号码获得性别：
 */
function ga_getXbFromSfz(xbObjcet,sfzObject)
{   
    var sfz = sfzObject.value;
   	var xb = sfz.substring(16,17);
	
	if(xb%2==0){
	    xbObjcet.value = '1';
		return xbObjcet.value;
	}
	
	if(xb%2!=0){
		xbObjcet.value = '2';
		return xbObjcet.value;
	}
}

/**
 * 身份证号码15位，17位升18位：
 * 18位校验是否正确，错误的自动更正；
 */
function ga_sfz15to18(a)
{
   var sfz15 = a.value;
   if(sfz15.length == 0) return '__ok__';

   var sfzcode="";
   var tempStr = "";
   var wh = "";
   
   if (sfz15.length == 15){
      tempStr = sfz15.substring(0, 6) + "19" + sfz15.substring(6);
      wh = sfzwh(tempStr);
      sfzcode = tempStr + wh;
      a.value=sfzcode;
      return '__ok__';
   }else if (sfz15.length == 17){
      wh = sfzwh(sfz15);
      sfzcode = sfz15 + wh;
      a.value=sfzcode;
      return '__ok__';
   }else if (sfz15.length  == 18){
      tempStr = sfz15.substring(0,17);
      wh = sfzwh(tempStr);
      sfzcode = tempStr + wh;
      if (sfzcode!=sfz15){
          alert("身份证号校验位错误:"+sfz15+",正确的号码是："+sfzcode);
          a.value=sfzcode;
          return '__ok__';
      }return '__ok__';
   }else{
      return '_error_';
   }

}

/**
 * 获得尾号
 */
function sfzwh(code)
{
 var retStr = '0';
 var bodycode = new Array(19);
 var codeev = new Array(19);
 var i, sum=0;
 var keycode, keycode1;
 var codevalue = [
    '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
 var  weight =
    [
    0, 1, 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7];

 try
 {
    for (var i = 0; i < 19; i++)
    {
       bodycode[i] = 0;
       codeev[i] = 0;
    }

    for (var i = 2; i <= 18; i++)
    {
       codeev[i] = code.charCodeAt(18 - i);
       bodycode[i] = (codeev[i] - 0x30);
    }

    for (sum = 0, i = 2; i <= 18; i++)
    {
       sum += bodycode[i] * weight[i];
    }

    keycode = (sum % 11);

    if (keycode < 0 || keycode > 11) return  - 1;
    keycode1 = codevalue[keycode];
    return keycode1;

 }
 catch (e)
 {
    alert("error"+e);
 }

 return retStr;
}

/**
 * 校验配偶间身份证号性别位不能相同：
 */
function ga_pojSfzXbValidate(SfzObject,poSfz)
{  
    var sfz = SfzObject.value;
    if(poSfz.length != 18 || sfz.length != 18){
    	return '__ok__';
    }
   	var xb = sfz.substring(16,17);
   	var poXb = poSfz.substring(16,17);
	//异或，相同为false，不同为true
	if((poXb%2)^(xb%2)){
	    return '__ok__';
	}
	return '_error_';
}

/**
 * 校验已婚、再婚、复婚的，其配偶的身份证号不能为空：
 */
function ga_poSfzAndHyzk(posfzObject,hyzk)
{
	var posfz = posfzObject.value;
	if(hyzk != null && hyzk != ''){
	    var hyzkStr = hyzk.substring(0,1);
	    if(hyzkStr == '2' && posfz==''){
	    	return '_error_';
	    } 
	}
	return '__ok__';
}

/**
 * 校验证号和姓名关系：
 * 姓名不空则对应证号必填
 */		 	 
function ga_sfzAndXm(sfzObj, xm)
{
    var sfz=sfzObj.value;
    if(sfz == '' && xm != ''){
    	return '_error_';
    }
    return '__ok__';
}
